package pers.archives.common.utils;

import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

/* 数据类型转换
 *@program:archives-parent
 *@author: 赵浩浩
 *@Time: 2020/9/7  16:00
 */
@Slf4j
public class ConversionUtil {

    /**
     * 将集合进行转换
     * @param targetType
     * @param listObject
     * @param <T>
     * @return
     */
    public static <T> List<T> conversionList(Class<T> targetType, List<Object> listObject) {
        if(targetType == null) {
            log.error("传入的目标类型不能为空");
            return null;
        }
        if(listObject == null) {
            log.error("需要转换的元数据不能为空");
            return null;
        }
        List<T> list = new ArrayList<T>();
        if (listObject instanceof ArrayList<?>) {
            for (Object o : (List<?>) listObject) {
                list.add(targetType.cast(o));
            }
            return list;
        }
        log.info("集合数据类型转换成功");
        return null;
    }

    public static <T> T[] conversionArray(Class<T> targetType, Object[] arrayObject) {
        if(targetType == null) {
            log.error("传入的目标类型不能为空");
            return null;
        }
        if(arrayObject == null) {
            log.error("需要转换的元数据不能为空");
            return null;
        }
        T[] targetArray = (T[]) Array.newInstance(targetType, arrayObject.length);
        try {
            System.arraycopy(arrayObject, 0, targetArray, 0, arrayObject.length);
        } catch (Exception e) {
            log.error("数据类型转换失败 -> {}", e.getMessage());
        }
        log.info("数组数据类型转换成功");
        return targetArray;
    }
}
